package Z.dailyExercise._1223;

import jdk.management.resource.internal.inst.FileOutputStreamRMHooks;
import org.omg.PortableInterceptor.INACTIVE;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Stack;

public class _13_罗马数字转整数 {
    public static void main(String[] args) {
        _13_罗马数字转整数 test = new _13_罗马数字转整数();
        test.romanToInt("IX");
    }

    /**
     * 自解：有一个case的判断类
     * 如果一个长度 直接输出
     * 大于1时 逐个字符进行比对 每一个字符加下一个
     * 如果是 ixc 则是 减下一项 取绝对值---
     * ---问题：如果是ixc连着的话 不会减
     * * @param s
     * @return
     */
    public int romanToInt(String s) {

        if (s.length() ==1){
            return judge(s.charAt(0));
        }
        ArrayList<Integer> list = new ArrayList<>();

        for (int i=0;i<s.length()-1;i++){
            if((s.charAt(i) == 'I') && (s.charAt(i+1) == 'V' || s.charAt(i+1) == 'X' )){
                list.add(-1);
            }else if ((s.charAt(i) == 'X') && (s.charAt(i+1) == 'L' || s.charAt(i+1) == 'C' )){
                list.add(-10);
            }else if ((s.charAt(i) == 'C') && (s.charAt(i+1) == 'D' || s.charAt(i+1) == 'M' )){
                list.add(-100);
            }else {

                list.add(judge(s.charAt(i)));
            }
        }
        list.add(judge(s.charAt(s.length()-1)));

        int result =0 ;
        for (int num:list){
            result += num;
        }

        return result;


    }

    public int judge(char c){
        int num =0;
        switch (c){
            case 'I':
                num = 1;
                break;
            case 'V':
                num = 5;
                break;
            case 'X':
                num = 10;
                break;
            case 'L':
                num = 50;
                break;
            case 'C':
                num = 100;
                break;
            case 'D':
                num = 500;
                break;
            case 'M':
                num = 1000;
                break;
        }

        return num;
    }

    /**
     * 题解：不用判断哪几种情况 只要小数在大数前面 就减法 否则假发
     * 最终结果加的始终不是当前值 而是前一位
     */
    public int romanToInt1(String s) {
        int sum = 0;
        int pre = judge(s.charAt(0));
        for(int i=1;i<s.length();i++){
            int num = judge(s.charAt(i));

            if (pre<num){
                sum -= pre;
            }else {
                sum += pre;
            }

            pre = num;
        }

        sum += pre;
        return sum;
    }
}
